/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.gob.fonafe.dao.impl.stored;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import oracle.jdbc.OracleTypes;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.StoredProcedure;
import pe.gob.fonafe.domain.BuscaSubastaBean;
import pe.gob.fonafe.domain.SubastaBean;

/**
 *
 * @author czela
 */
public class ListarSubastaSP extends StoredProcedure{

    private static final String PROC_PARAM ="USERFINAL.P_OBTENER_SUBASTA";

    public ListarSubastaSP(DataSource ds) {
        super(ds, PROC_PARAM);
        declareParameter(new SqlParameter("P_tb_TipSub_Id_TipoSubasta", Types.VARCHAR));
        declareParameter(new SqlParameter("P_ESTADO", Types.VARCHAR));
        declareParameter(new SqlParameter("P_TB_CLASE_SUB_id_Clase_Sub", Types.INTEGER));
        declareParameter(new SqlParameter("P_FECHA_VENCIMIENTO_DESDE", Types.DATE));
        declareParameter(new SqlParameter("P_FECHA_VENCIMIENTO_HASTA", Types.DATE));
        declareParameter(new SqlParameter("PAR_ID_EMPRESA", Types.NUMERIC));

        declareParameter(new SqlOutParameter("cCURSOR", OracleTypes.CURSOR,new ListaSubastaRowMapper()));
        compile();
    }

    public Map execute(BuscaSubastaBean buscaSubastaBean) {
        Map inputs = new HashMap();
        
        inputs.put("P_tb_TipSub_Id_TipoSubasta", buscaSubastaBean.getIdTipoSubasta());
        inputs.put("P_ESTADO", "publicado");
        inputs.put("P_TB_CLASE_SUB_id_Clase_Sub", buscaSubastaBean.getIdClaseSubasta());
        inputs.put("P_FECHA_VENCIMIENTO_DESDE", buscaSubastaBean.getFechaDesde());
        inputs.put("P_FECHA_VENCIMIENTO_HASTA", buscaSubastaBean.getFechaHasta());
        inputs.put("PAR_ID_EMPRESA", buscaSubastaBean.getIdEmpresa());
        return super.execute(inputs);
    }

    private static class ListaSubastaRowMapper implements RowMapper<SubastaBean>{

        public SubastaBean mapRow(ResultSet rs, int rowNum) throws SQLException {
            SubastaBean bean = new SubastaBean();
            bean.setId(rs.getString("ID_SUBASTA"));
            bean.setNombre(rs.getString("NOMBRE"));
            bean.setTipo(rs.getString("TIPOSUBASTA"));
            bean.setClase(rs.getString("CLASES"));
            bean.setEstado(rs.getString("ESTADO"));
            bean.setCantBienes(rs.getInt("CANTBIENES"));
            bean.setFechCreacion(rs.getDate("FECHA_CREACION"));
            bean.setFechVencimiento(rs.getDate("FECHA_VENCIMIENTO"));
            if(rs.getBlob("BASES") != null){
                bean.setBases(rs.getBlob("BASES").getBytes(1, (int)rs.getBlob("BASES").length()));
            }
            bean.setNombases(rs.getString("NOMBREARCHIVOBASE"));
            bean.setContentTypeBases(rs.getString("EXTARCHIVOBASE"));
            bean.setEmpresa(rs.getString("nombre_empresa"));
            return bean;
        }
    }

}
